## Домашнее задание

## [1 Тест по модулю](https://forms.gle/DHHQsfkzSQ4AiSVy9)


## 2 Практические задания


### 1 Платёжные системы

Пользователь вводит номер банковской карты, программа определяет тип платёжной системы. 

Задачу решить  с использованием словаря.

Номера карт начинаются с:

* 2 - Мир
* 3 - American Express, JCB International, Diners Club
  * 30, 36, 38 - Diners Club
  * 31, 35 - JCB International
  * 34, 37 - American Express
* 4 - VISA
* 5 - MasterCard, Maestro
  * 50, 56, 57, 58 - Maestro
  * 51, 52, 53, 54, 55 - MasterCard
* 6 - Maestro, China UnionPay, Discover
  * 60 - Discover
  * 62 - China UnionPay
  * 63, 67 - Maestro
* 7 - УЭК (Универсальная электронная карта)

а) по первой цифре карты
``` python
int(s[0]) == 4 # Visa
```

б) по первым двум цифрам карты

``` python
int(s[0:2]) == 56 # Maestro
```

### 2  Имеется словарь с наименованиями предметов и их весом (в граммах):
```python
things = {'карандаш': 20, 'зеркальце': 100, 'зонт': 500, 'рубашка': 300, 
          'брюки': 1000, 'бумага': 200, 'молоток': 600, 'пила': 400, 'удочка': 1200,
          'расческа': 40, 'котелок': 820, 'палатка': 5240, 'брезент': 2130, 'спички': 10}
```
Сергей собирается в поход и готов взвалить на свои хрупкие плечи максимальный вес в N кг (вводится с клавиатуры). 

Он решил класть в рюкзак предметы в порядке убывания их веса (сначала самые тяжелые, затем, все более легкие) так, чтобы их суммарный вес не превысил значения N кг. 

Все предметы даны в единственном экземпляре. Выведите список предметов (в строчку через пробел), которые берет с собой Сергей в порядке убывания их веса.

`P. S. 1 кг = 1000 грамм`

> Входные данные: `10`

> Выходные данные: `палатка брезент удочка брюки пила карандаш спички`



### 3 Отзывы на чат-бот

Дано множество сообщений пользователей с их оценкой работы чат-бота. Все они содержат эмодзи. 

Также даны два множества эмодзи, отражающие положительные и отрицательные эмоции.
Каждый эмодзи - это просто текстовая строка из одного специального символа.

```python
happy_emojis = {'💯', '😍', '👌', '😇', '🫶', '👍', '🙏', '👏', '☺', '🙂', '🥰', '❤', '😊', '😉'}
unhappy_emojis = {'👎', '🤨', '😒', '💩', '🖕', '😖', '☹', '😠', '😡', '😑', '😐', '🙄', '😔', '🙁'}

texts = {
  '👏👏👏 Впечатлен оперативностью и точностью ответов бота.',
  'Очень рад, что чат-бот доступен круглосуточно 🙏',
  'Бот вообще не помог мне разобраться в проблеме ☹',
  'Бот не понимает контекста вопроса, это раздражает 😠',
  'Бот помог мне быстро разобраться в сложной ситуации 👍',
  'Бот решил мою проблему быстро и уверенно 👌',
  'Бот хорошо понимает мои запросы, это удивительно! 😍',
  'Вопросы напрочь игнорируются, это не устраивает 😡',
  'Впечатляющий сервис, спасибо за помощь! 🙏',
  'Невозможно получить развернутый и полезный ответ от бота 👎👎👎',
  'Отлично справляется с техническими вопросами, молодец! 😇😇😇',
  'Очень недоволен отсутствием результата после общения с ботом 🙁',
  '👍Очень удобно общаться с чат-ботом техподдержки.',
  'Переписка с ботом только усугубила мою ситуацию 😖',
  'Плохая реакция на мои запросы, чувствую себя безнадежно 😔',
  'Помог решить проблему!👍 Но пришлось несколько раз переформулировать вопрос🙄',
  'Спасибо за быстрый отклик!❤ Это очень ценно!',
  'Бесполезный бот! 👎👎 Надеюсь, его разработчика уволят 😊',
  '👍 Очень полезный инструмент для решения технических проблем.',
  '👎 Попробовал обратиться за помощью, но бот оказался бесполезным.',
  '😔 Разочарован пассивностью и безполезностью бота.',
  '🙄 Бот отвечает стандартными фразами, не решая проблему.'
  }
```

а) Вывести на экран все сообщения, содержащие эмодзи из множества ```unhappy_emojis```.

<details><summary>Как узнать, есть ли символ в строке</summary>
У строк есть операция <tt>in</tt>, позволяющая узнать, есть ли в строке какой-то символ или последовательность символов. Результат такой операции - <tt>True</tt> или <tt>False</tt>.
<pre>
x = '❤' in 'Я ❤ Python'  # True
y = '💯' in '99'  # False
</pre>
</details>

<details><summary>Как свести задачу к операции над множествами?</summary>
Строку можно превратить в множество с помощью функции <tt>set()</tt>. Получим множество символов, содержащихся в этой строке.

Имея множество символов в строке и множество эмодзи, можно с помощью операции их пересечения посмотреть, есть ли строке эти эмодзи. Пересечение множеств записывается как <tt>z = x & y</tt>. Если полученное множество не пустое (его длина, измеренная с помощью <tt>len()</tt>, больше нуля), то искомые эмодзи там есть.</details>

б) Создать два множества - одно с сообщениями, имеющими положительные реакции, другое - с отрицательными реакциями.

<details><summary>Как создать и заполнить множества?</summary>
Пустое множество создаётся вызовом команды <tt>set()</tt> (а не пустыми фигурными скобками). Добавить элемент в множество - <tt>x.add(y)</tt>.

Также можно использовать генератор множества:
<pre>x = {y for y in z if blah_blah_blah}</pre>
</details>

в) Создать множество сообщений, в которых отсутствуют эмодзи с отрицательными эмоциями. Сравнить с множеством сообщений с положительными эмодзи. Сравнить эти два множества: равны ли они, или же одно является подмножеством другого.

г) Узнать, есть ли сообщения, содержащие оба вида эмодзи. Вывести их на экран, если таковые найдутся.

д) Вывести на экран сколько процентов сообщений содержат положительные эмодзи, а сколько - отрицательные.


